在Day 14, 大家都會見到我為大家講解的例子,在項目的核心java(即係含有@SpringBootApplication的java, 每個項目只有一個java是有@SpringBootApplication) 有提到@ComponentScan與@EntityScan。
究竟它們是有什麼用的?
首先@ComponentScan的目的是透過掃描package去檢查有什麼class會被註冊為Spring的bean。而註冊為bean的意思是class的實例的生命週期及注入等過程交由Spring容器(Spring IoC Container)管理。
@ComponentScan會掃描包含以下注解的class:
@Component,@Service,@Controller,@RestController,@Repository,@Configuration
而在Day 14的例子中:
@ComponentScan({"com.example.demo","com.example.model","com.example.controller","com.example.service","com.example.repository"})
由於每個package都有被需要讀取的class,所以要將每個package加在@ComponentScan()的括號內,用”,”去分隔。
當完成添加及儲存後,再運行Spring Boot 應用程式時,系統就會去掃描@ComponentScan()的括號內的package,如果有找到@Component,@Service,@Controller,@RestController,@Repository,@Configuration,就會去讀取相關的class。
@EntityScan
雖然大家也看到@EntityScan,但在Day 14的例子中是沒有作用的。不過也想跟大家說說,它是透過掃描package去檢查有什麼class會被註冊為持久層所管理的實體類(entity class)。而只有包含注解@Entity的class才會被讀取。